function    A308()
format long;

    % 小波分析是一种窗口大小固定、形状可变的时频局部化信号分析方法，在低频部分具有较高的频率分辨率和较低的时间分辨率，
    % 在高频部分具有较高的时间分辨率和较低的频率分辨率。
    % 读取数据
    data1 = readmatrix('A3_data_single.xlsx');                                   % 读取单排钢筋数据
    data2 = readmatrix('A3_data_double.xlsx');                                   % 读取双排钢筋数据
    signal1 = data1(:, 150);                                                     % 提取第150列数据作为信号1（单排钢筋）
    signal2 = data2(:, 150);                                                     % 提取第150列数据作为信号2（双排钢筋）
    t = (1:length(signal1))';
    
    % 设置分解层数
    levels = 3;
    
    % 使用 Daubechies 小波进行分析
    wavelet_db = 'db4';                                                          % 使用 Daubechies 小波
    
    % 1层离散小波分解
    [approx1_db, detail1_db] = dwt(signal1, wavelet_db);                        % 信号1 Daubechies 小波
    [approx2_db, detail2_db] = dwt(signal2, wavelet_db);                        % 信号2 Daubechies 小波
    
    % 多层小波分解的函数
    [~, detail1_db_multi] = multi_level_dwt(signal1, wavelet_db, levels);       % 信号1多层小波分解
    [~, detail2_db_multi] = multi_level_dwt(signal2, wavelet_db, levels);       % 信号2多层小波分解
    
    % 计算细节系数差值
    detail_diff_db_multi = cell(1, levels);
    for i = 1:levels
        detail_diff_db_multi{i} = detail2_db_multi{i} - detail1_db_multi{i};    % 差值
    end
    
    % 使用 Symlets 小波进行分析
    wavelet_sym = 'sym12';                                                       % 使用 Symlets 小波
    
    % 1层离散小波分解
    [approx1_sym, detail1_sym] = dwt(signal1, wavelet_sym);                      % 信号1 Symlets 小波
    [approx2_sym, detail2_sym] = dwt(signal2, wavelet_sym);                      % 信号2 Symlets 小波
    
    % 多层小波分解的函数
    [~, detail1_sym_multi] = multi_level_dwt(signal1, wavelet_sym, levels);      % 信号1多层小波分解
    [~, detail2_sym_multi] = multi_level_dwt(signal2, wavelet_sym, levels);      % 信号2多层小波分解
    
    % 计算细节系数差值
    detail_diff_sym_multi = cell(1, levels);
    for i = 1:levels
        detail_diff_sym_multi{i} = detail2_sym_multi{i} - detail1_sym_multi{i};    % 差值
    end
    
    % 绘制图形
    % 绘制 Symlets 小波分析结果
    figure;
    
    % 子图1：原始信号
    subplot(4, 3, 1);
    plot(t, signal1, 'b', 'LineWidth', 1);                                        % 信号1（单排钢筋）
    hold on;
    plot(t, signal2, 'r', 'LineWidth', 1);                                        % 信号2（双排钢筋）
    grid on;
    title('原始信号 - Symlets 小波', 'FontSize', 12);
    xlabel('采样点', 'FontSize', 10);
    ylabel('幅值', 'FontSize', 10);
    legend('单排钢筋', '双排钢筋');
    
    % 子图2：信号1近似系数与细节系数
    subplot(4, 3, 2);
    plot(approx1_sym, 'b', 'LineWidth', 1);                                       % 信号1近似系数
    hold on;
    plot(detail1_sym, 'r', 'LineWidth', 1);                                       % 信号1细节系数
    grid on;
    legend('近似系数', '细节系数');
    title('信号1（单排钢筋） - Symlets 小波第1层', 'FontSize', 12);
    xlabel('采样点', 'FontSize', 10);
    ylabel('幅值', 'FontSize', 10);
    
    % 子图3：信号2近似系数与细节系数
    subplot(4, 3, 3);
    plot(approx2_sym, 'b', 'LineWidth', 1);                                       % 信号2近似系数
    hold on;
    plot(detail2_sym, 'r', 'LineWidth', 1);                                       % 信号2细节系数
    grid on;
    legend('近似系数', '细节系数');
    title('信号2（双排钢筋） - Symlets 小波第1层', 'FontSize', 12);
    xlabel('采样点', 'FontSize', 10);
    ylabel('幅值', 'FontSize', 10);
    
    % 子图4-6：信号1多层细节系数
    for i = 1:levels
        subplot(4, 3, i + 3);
        plot(detail1_sym_multi{i}, 'b', 'LineWidth', 1);
        grid on;
        title(['信号1（单排钢筋） - 第', num2str(i), '层细节系数'], 'FontSize', 12);
        xlabel('采样点', 'FontSize', 10);
        ylabel('幅值', 'FontSize', 10);
    end
    
    % 子图7-9：信号2多层细节系数
    for i = 1:levels
        subplot(4, 3, i + 6);
        plot(detail2_sym_multi{i}, 'r', 'LineWidth', 1);
        grid on;
        title(['信号2（双排钢筋） - 第', num2str(i), '层细节系数'], 'FontSize', 12);
        xlabel('采样点', 'FontSize', 10);
        ylabel('幅值', 'FontSize', 10);
    end
    
    % 子图10-12：细节系数差值
    for i = 1:levels
        subplot(4, 3, i + 9);
        plot(detail_diff_sym_multi{i}, 'k', 'LineWidth', 1);
        grid on;
        title(['细节系数差值 - 第', num2str(i), '层'], 'FontSize', 12);
        xlabel('采样点', 'FontSize', 10);
        ylabel('幅值', 'FontSize', 10);
    end

    % 绘制 Daubechies 小波分析结果
    figure;
    
    % 子图1：原始信号
    subplot(4, 3, 1);
    plot(t, signal1, 'b', 'LineWidth', 1);                                        % 信号1（单排钢筋）
    hold on;
    plot(t, signal2, 'r', 'LineWidth', 1);                                        % 信号2（双排钢筋）
    grid on;
    title('原始信号 - Daubechies 小波', 'FontSize', 12);
    xlabel('采样点', 'FontSize', 10);
    ylabel('幅值', 'FontSize', 10);
    legend('单排钢筋', '双排钢筋');
    
    % 子图2：信号1近似系数与细节系数
    subplot(4, 3, 2);
    plot(approx1_db, 'b', 'LineWidth', 1);                                       % 信号1近似系数
    hold on;
    plot(detail1_db, 'r', 'LineWidth', 1);                                       % 信号1细节系数
    grid on;
    legend('近似系数', '细节系数');
    title('信号1（单排钢筋） - Daubechies 小波第1层', 'FontSize', 12);
    xlabel('采样点', 'FontSize', 10);
    ylabel('幅值', 'FontSize', 10);
    
    % 子图3：信号2近似系数与细节系数
    subplot(4, 3, 3);
    plot(approx2_db, 'b', 'LineWidth', 1);                                       % 信号2近似系数
    hold on;
    plot(detail2_db, 'r', 'LineWidth', 1);                                       % 信号2细节系数
    grid on;
    legend('近似系数', '细节系数');
    title('信号2（双排钢筋） - Daubechies 小波第1层', 'FontSize', 12);
    xlabel('采样点', 'FontSize', 10);
    ylabel('幅值', 'FontSize', 10);
    
    % 子图4-6：信号1多层细节系数
    for i = 1:levels
        subplot(4, 3, i + 3);
        plot(detail1_db_multi{i}, 'b', 'LineWidth', 1);
        grid on;
        title(['信号1（单排钢筋） - 第', num2str(i), '层细节系数'], 'FontSize', 12);
        xlabel('采样点', 'FontSize', 10);
        ylabel('幅值', 'FontSize', 10);
    end
    
    % 子图7-9：信号2多层细节系数
    for i = 1:levels
        subplot(4, 3, i + 6);
        plot(detail2_db_multi{i}, 'r', 'LineWidth', 1);
        grid on;
        title(['信号2（双排钢筋） - 第', num2str(i), '层细节系数'], 'FontSize', 12);
        xlabel('采样点', 'FontSize', 10);
        ylabel('幅值', 'FontSize', 10);
    end
    
    % 子图10-12：细节系数差值
    for i = 1:levels
        subplot(4, 3, i + 9);
        plot(detail_diff_db_multi{i}, 'k', 'LineWidth', 1);
        grid on;
        title(['细节系数差值 - 第', num2str(i), '层'], 'FontSize', 12);
        xlabel('采样点', 'FontSize', 10);
        ylabel('幅值', 'FontSize', 10);
    end
end

function [approx, details] = multi_level_dwt(signal, wavelet, levels)
    approx = signal;
    details = cell(1, levels);
    for i = 1:levels
        [approx, details{i}] = dwt(approx, wavelet);
    end
end
